package control;

import java.io.Serializable;
import java.util.List;

import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;

import service.RiscosService;
import entity.Disciplina;
import entity.GravidadeEnum;
import entity.Risco;

@Named
@SessionScoped
public class ManterRiscoControl implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 5317108768461608646L;
	
	private String operacao;
	private static String OP_ALTERAR = "A";
	private static String OP_INCLUIR = "I";
	
	private Risco risco;
	
	private List<Risco> listRisco;
	private GravidadeEnum[] listaGravidade  = GravidadeEnum.values();
	
	@Inject
	private MenuControl menu;
	
	@EJB
	private RiscosService riscoService;
	
	public String iniciarListarRisco(){
		
		
		return "/pages/riscos/listar_risco";
	}
	
	public String iniciarIncluirRisco(){
		operacao = OP_INCLUIR;
		risco = new Risco();
		
		
		
		return "/pages/risco/editar_risco";
	}
	
	public String iniciarAlterarRisco(){
		operacao = OP_ALTERAR;
		
		return "/pages/risco/editar_risco";
	}
	
	public String iniciarExcluirRiscos(){
		operacao = "Excluir";
		
		return "/pages/riscos/editar_risco";
	}
	
	public String incluirRisco(){
		try {
			riscoService.incluirRisco(menu.getIdProjetoSelecionado(),risco);
			FacesContext.getCurrentInstance().addMessage(null, 
					new FacesMessage(FacesMessage.SEVERITY_INFO, "Sucesso ao incluir risco.", ""));
			
			risco = new Risco();
		} catch (Exception e) {
			
			FacesContext.getCurrentInstance().addMessage(null, 
					new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao incluir Risco.", ""));
		}
		
		
		return pesquisarRisco();
	}
	
	public String excluirRisco(){
		try {
			riscoService.excluirRisco(risco);
			FacesContext.getCurrentInstance().addMessage(null, 
					new FacesMessage(FacesMessage.SEVERITY_INFO, "Sucesso ao excluir risco.", ""));
			
		} catch (Exception e) {
			FacesContext.getCurrentInstance().addMessage(null, 
					new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao excluir Risco.", ""));
		}
		
		return pesquisarRisco();
	}
	
	public String alterarRisco(){
		try{
			
			riscoService.alterarRisco(risco);
			FacesContext.getCurrentInstance().addMessage(null, 
					new FacesMessage(FacesMessage.SEVERITY_INFO, "Sucesso ao alterar risco.", ""));
			risco = new Risco();
			
		}
		catch (Exception e){
			e.printStackTrace();
			FacesContext.getCurrentInstance().addMessage(null, 
					new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao alterar Risco.", ""));
			
		}
		
		return pesquisarRisco();
	}
	
	
	public String pesquisarRisco(){
		if (risco == null){
			risco = new Risco();
		}
		try {
			listRisco = riscoService.pesquisarRiscoDoProjeto(menu.getIdProjetoSelecionado(), risco);
			
		} catch (Exception e) {
			FacesContext.getCurrentInstance().addMessage(null, 
					new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao pesquisar Risco.", ""));
			
			return "/pages/inicial";
		}
		
		return "/pages/risco/listar_risco"; 
	}


	public String getOperacao() {
		return operacao;
	}

	public void setOperacao(String operacao) {
		this.operacao = operacao;
	}

	public Risco getRisco() {
		return risco;
	}

	public void setRisco(Risco risco) {
		this.risco = risco;
	}

	public List<Risco> getListRisco() {
		return listRisco;
	}

	public void setListRisco(List<Risco> listRisco) {
		this.listRisco = listRisco;
	}
	public boolean getExibirAlterar() {
		return OP_ALTERAR.equals(operacao);
	}
	
	public boolean getExibirIncluir() {
		return OP_INCLUIR.equals(operacao);
	}

	public GravidadeEnum[] getListaGravidade() {
		return listaGravidade;
	}

	public void setListaGravidade(GravidadeEnum[] listaGravidade) {
		this.listaGravidade = listaGravidade;
	}
	
}
